﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
#include<string>
#include<map>
using namespace std;
//int main()
//{
//	std::initializer_list<int> mylist;
//	mylist = { 10, 20, 30 };
//	cout << sizeof(mylist) << endl;
//	// 这里begin和end返回的值initializer_list对象中存的两个指针
//	// 这两个指针的值跟i的地址跟接近，说明数组存在栈上
//	int i = 0;
//	cout << mylist.begin() << endl;
//	cout << mylist.end() << endl;
//	cout << &i << endl;
//	// {}列表中可以有任意多个值
//	// 这两个写法语义上还是有差别的，第⼀个v1是直接构造，
//	// 第⼆个v2是构造临时对象+临时对象拷⻉v2+优化为直接构造
//	vector<int> v1({ 1,2,3,4,5 });
//	vector<int> v2 = { 1,2,3,4,5 };
//	const vector<int>& v3 = { 1,2,3,4,5 };
//	// 这里是pair对象的{}初始化和map的initializer_list构造结合到⼀起⽤了
//	map<string, string> dict = { {"sort", "排序"}, {"string", "字符串"} };
//	// initializer_list版本的赋值支持
//	v1 = { 10,20,30,40,50 };
//	return 0;
//}





//// STL中的容器都增加了⼀个initializer_list的构造
//vector(initializer_list<value_type> il, const allocator_type& alloc =
//	allocator_type());
//list(initializer_list<value_type> il, const allocator_type& alloc =
//	allocator_type());
//map(initializer_list<value_type> il, const key_compare& comp =
//	key_compare(), const allocator_type& alloc = allocator_type());
//// ...
//template<class T>
//class vector {
//public:
//	typedef T* iterator;
//	vector(initializer_list<T> l)
//	{
//		for (auto e : l)
//			push_back(e)
//	}
//private:
//	iterator _start = nullptr;
//	iterator _finish = nullptr;
//	iterator _endofstorage = nullptr;
//};
//// 另外，容器的赋值也支持initializer_list的版本
//vector& operator= (initializer_list<value_type> il);
//map& operator= (initializer_list<value_type> il);